#include <list>
#include <vector>
#include <iostream>

using namespace std;

int main(int argc, char *argv[]) {
    vector<int> vec = vector<int>(3, 100);
    list<int> li1;
    list<int> li2;
    list<int> li3;
    // 通过其他容器赋值
    li1.assign(vec.begin(), vec.end());
    // 直接赋值
    li2.assign(3, 100);
    // 从数值赋值
    int c[] = {1, 2, 4, 3};
    li3.assign(c, c + 4);

    list<pair<int,char>>li4;
    li4.emplace(li4.begin(),3,'a');
    li4.emplace(li4.begin(),4,'b');
    li4.emplace_front(2,'Z');
    li4.emplace_back(5,'c');
    if(!li4.empty())
        cout<<"list li4 非空"<<endl;
//    for(auto it=li4.rbegin();it!=li4.rend();it++)
//        cout<<(*it).first<<" "<<(*it).second<<endl;
    //li1 插入元素1
    li1.insert(li1.begin(),5);//5 100 100 100
    // 插入两个20
    li1.insert(li1.begin(),2,30);//30 30 5 100 100 100
    // 插入另一个容器vec的元素
    li1.insert(li1.end(),vec.begin(),vec.end());//30 30 5 100 100 100 100 100 100
    // list 的最大size
    auto max_size = li1.max_size();
    // 对链表排序5 30 30 100 100 100 100 100 100
    li1.sort();
    list<int> li5 = {9,1,4,3,2};
    li5.sort();//1 2 3 4 9
    // 融合两个list
    li1.merge(li5);
    list<int> li6;
    li6 = li1;//将li1的数据拷贝到li6
    li1.pop_front();
    // 删除list里面的元素
    li6.remove(100);//1 2 3 4 5 9 30 30
    // 反转链表
    li6.reverse();//30 30 9 5 4 3 2 1
    int list_size = li6.size();//8

    li6.unique();//30 9 5 4 3 2 1
    li6.resize(8);//30 9 5 4 3 2 1 0
    li6.resize(9,10);//30 9 5 4 3 2 1 0 10


    for(auto i:li6)
        cout<<i<<" "<<endl;

}